Skip to main content

How to Setup ImmichFrame on Frameo Devices

Overview

Frameo digital photo frames are WiFi-connected devices designed for displaying photos and videos. They allow users to share images directly from their smartphones using the Frameo mobile app, making it easy to keep loved ones updated with new memories.

Frameo Hardware

Example Hardware Used

FRAMEO Digital Photo Frame, 10.1 Inch WiFi

info

Below is install from Immichframe docs source. A Big thanks to all the contributers and development staff on this great addition to immich. I added the instructions below for a more seamless setup instead of flipping through tabs on your browser.

Frameo Install

ImmichFrame can be run on inexpensive Frameo digital photo frames with some additional effort. You can typically find these for ~$40 USD. These devices are low powered and run a very old Android version, so they cannot run the full WebView version of the app (however most of the main features are still supported except SplitView). We have found a method to update the WebView, but it is not without risks, see Frameo Webview Update below.
If you have not already, you will need to install ADB on your PC ([ADB instructions][ADB-link]). ADB is often enabled on these devices by default, if it is not go to Frameo Settings-About-Enable Beta Program. Toggle ADB Access On-Off-On. Use the ADB commands below to sideload ImmichFrame APK, configure it to your liking, then disable the Frameo app to to set ImmichFrame as default Home app:

  • Sideload ImmichFrame:
    adb install /path/to/ImmichFrame_vXX.apk
  • Update existing ImmichFrame:
    adb install -r /path/to/ImmichFrame_vXX.apk
  • Start ImmichFrame:
    adb shell am start com.immichframe.immichframe/.MainActivity
    • Swipe down to enter ImmichFrame Settings
    • Configure URL and Authorization Secret (optional)
    • Disable WebView
  • Set as default HOME app
    • On first reboot after install you will be asked to select default Launcher, select ImmichFrame
    • Alternatively you can disable Frameo
      adb shell su
      pm disable net.frameo.frame
      exit
      If this doesn't stick on reboot, repeat the commands but power cycle after exit command
  • Some other useful ADB commands:
    • Reboot:
      adb reboot
      • You can also reboot or shutdown by holding down power button
    • Access Android Settings:
      adb shell am start -a android.settings.SETTINGS
    • Re-enable Frameo: repeat disable commands above but replace "disable" with "enable"
    • Start Frameo app:
      adb shell am start net.frameo.frame
    • Uninstall ImmichFrame:
      adb uninstall com.immichframe.immichframe

Frameo WebView Update

warning

NOTE: IF YOU HAVE PERMISSIONS DENIED PLEASE GO TO THE TROUBLESHOOTING SECTION

Follow instructions below to update WebView to 106. This has been tested and working on Android 6.01 10.1" Frameo devices:

warning

MAKE SURE YOU RENAME WEBVIEW-XXX-XXX.apk to webview.apk before proceeding

  • Push new apk to sdcard
    adb push /path/to/your/new/webview.apk /sdcard/
  • Enter shell and switch to the root user
    adb shell
    then inside the shell
    su
  • Backup original WebView APK
    mount -o rw,remount /system && cp /system/app/webview/webview.apk /system/app/webview/webview.apk.bak
  • Delete the oat folder recursively
    mount -o rw,remount /system && rm -rf /system/app/webview/oat
  • Copy new WebView to system
    mount -o rw,remount /system && cp /sdcard/webview.apk /system/app/webview/webview.apk
  • exit root
    exit
  • Reboot device
    adb reboot

Depending on the device or Android version, the location to the webview apk may be different for you. You can locate it with

adb shell pm path com.android.webview

Frameo Troubleshooting

info

A Big Thanks to user DasOS for figuring this out in the post here. Without him this would not have been possible.

If you have mount: Operation not permitted OR CANNOT EDIT FILE READ ONLY ERROR Like below

frameo-error-1-read-only

or

root@BGS-102K-T:/ # mount -o rw,remount /system && cp /system/app/webview/webview.apk /system/app/webview/webview.apk.bak
cp /system/app/webview/webview.apk /system/app/webview/webview.apk.bak <
mount: Operation not permitted

You will need some extra steps that involve rooting it because your system comes pre-locked from factory.

After some investigation, this suggested that the device is using verified boot (dm-verity), which stopped attempts to overwrite the apk.

The way that I solved this was through a Magisk overlay.

  1. Install Discreet Launcher. This is a very small, simple launcher which works for Android 6. You need a launcher to be able to access Magisk. When installed, you'll see a prompt to use it after reboot. Swipe up from the bottom to see all apps
adb install discreet-launcher.apk

1.1 If it didnt install or open automatically then you need to run an adb command

1.2 Open the launcher manager. This will allow us to run an app directly using this any app on this system

adb shell am start -a android.intent.action.MAIN

1.3. Select the discreet-launcher from the list

warning

NOTE: Once you reboot you may need to renable magisk and re-root the device again. To do this open the launcher with adb shell am start -a android.intent.action.MAIN and select discrete-launcher. Then swipe up and select magisk from the apps screen. Re-run the rooting processs ---> direct install and reboot and you should be able to re-edit files again.

  1. Install Magisk. Once installed, run the app, then choose Install, Direct Install. After you reboot, it should report it is installed in the app, along with some complaints that it needs "additional setup". Don't worry about those.
adb install -r Magisk.apk
  1. Then create a Magisk overlay to copy the updated webview APK to the right place. Run these commands after running adb shell
su
APK=/sdcard/webview.apk
MOD=/data/adb/modules/replace_stock_webview

rm -rf "$MOD"
mkdir -p "$MOD/system/app/webview"
# Hide the entire original dir (including oat) so ART recompiles
touch "$MOD/system/app/webview/.replace"
cp "$APK" "$MOD/system/app/webview/webview.apk"

cat > "$MOD/module.prop" <<'EOF'
id=replace_stock_webview
name=Replace stock WebView (systemless)
version=1.0
versionCode=1
author=Dasos
description=Replaces /system/app/webview via Magisk overlay (.replace hides old files)
EOF

chmod 0644 "$MOD/module.prop" "$MOD/system/app/webview/webview.apk"
chmod 0755 "$MOD" "$MOD/system" "$MOD/system/app" "$MOD/system/app/webview"

reboot
  1. Once rebooted load up immichframe and check to see if it has the latest webview by pasting this inside the url for immichframe app
https://www.whatismybrowser.com/

IF IT SAYS ANYTHING ELSE BESIDE WebView 106 on Andorid Marhsmellow then you may have to redo the steps above.

If its wrong it will show this Webview-Wrong-Version

Immichframe wont load server after Webview106 is running

NOTE: This is caused by outdated CA Certs to fix this you will need a micro sd card as writing the cert to the device wont work. There is no other option that I could figure out.

  1. We need to check that we do indeed have this error by installing chrome first. Downlaod Chrome on the PC

Chrome for Android 6.0.1

  1. Now install chrome on frameo device

    2.1 Rename the download the chrome.apk

    2.2 now find the directory for the chrome.apk and replace J:\Downloads\Frameo\chrome.apk with your location of where you downloaded chrome.apk too.

    2.3 now install it by running

adb install J:\Downloads\Frameo\chrome.apk \sdcard\
  1. Now start chrome
adb shell am start -n com.android.chrome/com.google.android.apps.chrome.Main -d "https://demo.immichframe.dev"
  1. if it shows red and cross through https:// that means your CA Certs are not updated and you need to proceed to the next steps.

CA Error

  1. Insert your micro sd card into your pc and format if it hasnt already been

  2. We need to download the ISRG ROOT X1 PEM from here

  3. rename this to isrgrootx1.pem if its not already name this

  4. Copy and paste the file to the micro sd card thats in your computer

  5. Insert the SD card into the frameo device

  6. Open the tablet settings by running this command in adb

    • Access Android Settings:
      adb shell am start -a android.settings.SETTINGS
  7. Go to the Settings app and go into the Security page.

Android 6.0.1 Securities

  1. Scroll down to the “Credential Storage” section and select the “Install from SD card” option. It works even if you don’t have an SD card, as all Android versions past a certain point emulate an external storage. Selecting SD-Card

  2. Select the isrgrootx1.pem file in the file picker that shows up.

Select isrgrootx1.pem

  1. It will ask you to name the certificate. The name you give it does not matter or need to match, but we’ll write “ISRG Root X1” for correctness sake. For “Credential Use” the default “VPN and apps” works fine.

Settings for CA Cert

  1. If you haven’t set up a lock screen PIN yet it will prompt you to add one. Set a PIN

Once that is done it should have been installed. Once a custom root certificate is installed, Android will send a warning notification on each boot telling you that the network may be monitored. This is because a custom untrusted root certificate being installed without your knowledge could make an attacker able to perform MITM attacks on encrypted connections without causing certificate errors, as the certificate is trusted on the device. But Let’s Encrypt is a trusted certificate authority and if you downloaded the root certificate over a trusted connection you can simply ignore the notification, and swipe it away.

  1. Now our immmichframe should load our immichframe server. To test lets try demo in immichframe
adb shell am start com.immichframe.immichframe/.MainActivity
  1. Swipe up to load immichframe settings
  2. Add the demo server first to see if it loads
https://demo.immichframe.dev
  1. Then click ok and scroll down to the bottom and click close if it works you should see the demo.
  2. Do the same steps 16 and 17 and put your custom server success.
💬Join Discord
Buy me a coffee